package com.example.zipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo2 {
    public static void main(String[] args) throws IOException {

        /**
         * putNextEntry(ZipEntry e)：将新的条目添加到 ZIP 文件中。每个条目代表一个压缩的文件或文件夹。
         * closeEntry()：结束当前条目，并准备下一个条目。
         * write(byte[] b, int off, int len)：将字节数据写入当前条目。
         * close()：关闭流并完成压缩操作。
         */

        /**
         * 压缩流
         * 压缩的本质：把每一个文件或文件夹看成ZipEntry对象放在压缩包中
         */
        //1.创建File对象表示要压缩的文件
        File file = new File("zip/a.txt");
        //2.创建File对象表示压缩包的位置
        File zipFile = new File("zip/");
        //3.调用方法压缩
        tozip(file, zipFile);

    }

    /**
     * 压缩
     * 参数一：要压缩的文件
     * 参数二：压缩包的位置
     *
     * @param file
     * @param zipFile
     */
    public static void tozip(File file, File zipFile) throws IOException {
        //1.创建压缩流关联压缩包
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(new File(zipFile, "a.zip")));
        //2,创建ZipEntry对象，表示压缩包里面的每一个文件和文件夹
        ZipEntry entry = new ZipEntry("a.txt");
        //3.把ZipEntry对象放在压缩包中
        out.putNextEntry(entry);
        //4.把src文件中的数据写入压缩包中
        FileInputStream in = new FileInputStream(file);
        int read = in.read();
        while (read != -1) {
            out.write(read);
            read = in.read();
        }
        in.close();
        out.closeEntry();
        out.close();
    }

}
